#include "Escena.h"

#define PI 3.14159265

Escena::Escena()
	{
	this->ruedaPrincipal = new RuedaPrincipal();
	this->soporte = new Soporte(15,15);
	this->camaraEnCabina = false;
	this->camara = new Camara();
	this->tiempoDurEscena = 0;
	}


Escena::~Escena()
	{
	delete this->ruedaPrincipal;
	delete this->soporte;
	delete this->camara;
	}

int Escena::getTiempoDurEscena() const
	{
	return this->tiempoDurEscena;
	}

void Escena::setTiempoDurEscena(int tiempo)
	{
	this->tiempoDurEscena = tiempo;
	}

bool Escena::isCamaraEnCabina()
	{
	return this->camaraEnCabina;
	}

void Escena::setCamaraEnCabina(bool camaraEnCabina)
	{
	this->camaraEnCabina = camaraEnCabina;
	}

void Escena::ponerCamaraEnCabina()
	{
	this->ruedaPrincipal->getRuedaSecundaria(0)->getCabina(0)->ponerCamara(this->camara);
	this->camaraEnCabina = true;
	this->camara->setEye(0.0,0.0,CAMARA_H);
	this->camara->setCentre(15.0,0.0,CAMARA_H);
	this->camara->setUp(0.0,0.0,1.0);
	}

void Escena::sacarCamaraDeCabina()
	{
	this->ruedaPrincipal->getRuedaSecundaria(0)->getCabina(0)->quitarCamara();
	this->camaraEnCabina = false;
	this->camara->setEye(EYE_0,EYE_1,EYE_2);
	this->camara->setCentre(CENTRE_0,CENTRE_1,CENTRE_2);
	this->camara->setUp(UP_0,UP_1,UP_2);
	}

void Escena::dibujar(int tiempoDurEscena) { 

	//glPushMatrix();
	if(! this->camaraEnCabina){
		this->camara->lookat();
		glPushMatrix();
		glTranslatef(0.0, (this->soporte->getAlturaPie()*tan(this->soporte->getAnguloPie()*PI/180)/2), this->soporte->getAlturaPie());
		//glRotatef((this->getRuedaPrincipal()->getVelAngular()*this->tiempoDurEscena)*PI/180, 0.0, 1.0, 0.0);
		//glRotatef(90, 1.0, 0.0, 0.0);
		this->ruedaPrincipal->dibujar(this->tiempoDurEscena);
		glPopMatrix();

		glPushMatrix();
		this->soporte->dibujar(this->tiempoDurEscena);
		glPopMatrix();
	
		
	} else {
		glPushMatrix();
		//this->camara->setEye(25.0,0.0,10.0);
		this->camara->lookat();
		this->ruedaPrincipal->dibujarDesdeCabina(this->tiempoDurEscena);
		glPopMatrix();
	}
	glutPostRedisplay();
}

Camara* Escena::getCamara()
	{
	return this->camara;
	}

RuedaPrincipal* Escena::getRuedaPrincipal() {
	return this->ruedaPrincipal;
}